package tree

import "fmt"

type TreeNode struct {
	value int
	left  *TreeNode
	right *TreeNode
}

func (node *TreeNode) Insert(value int) *TreeNode {
	if node == nil {
		return &TreeNode{value: value}
	}
	if value < node.value {
		node.left = node.left.Insert(value)
	} else {
		node.right = node.right.Insert(value)
	}
	return node
}

// 前序遍历
func (node *TreeNode) PreOrder() {
	if node == nil {
		return
	}
	fmt.Println(node.value)
	node.left.PreOrder()
	node.right.PreOrder()
}

// 中序遍历
func (node *TreeNode) InOrder() {
	if node == nil {
		return
	}
	node.left.InOrder()
	fmt.Println(node.value)
	node.right.InOrder()
}

// 后序遍历
func (node *TreeNode) PostOrder() {
	if node == nil {
		return
	}
	node.left.PreOrder()
	node.right.PostOrder()
	fmt.Println(node.value)
}
